1、将一个数组中的数（3*n）分为n组，然后每组的和为组中第二大元素值，求所有数组和为多少
思想：因为求所有和的最大值，这样就是尽量多的取从小到大排序后的后面值，也就是第二个值越后越好，这也就决定了了  数组中的3个数的后2位都尽量为后面的2个值，
于是利用数学公式，得出没组第二个数在原数组中的下标即可
#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int main()
{
    int n=0;
    while(cin>>n)   //防止有多组测试用例     建议都这样写
    {
        long long sum=0;     //如果数组中 每个数比较大  可能会超过int范围（65535）
        vector<int> v;
        v.resize(3*n);
        for(int i=0;i<3*n;i++)
        {
            cin>>v[i];
        }
        sort(v.begin(),v.end());
        for(int i=0;i<n;i++)
        {
            sum+=v[v.size()-2*(i+1)];
        }
        cout<<sum<<endl;
    }
    
    return 0;
}

还有一点，对于在做测试题的时候  ，要注意cin输入的用法， while  可以一直输入，直到cin无数据了才停

2、删除2个字符串的公共字符
思想：将s2的字符串放到hash数组中，数组定义为256，因为字符个数为256个，将s2对应的字符都放在对应的下标处，再遍历s1的时候，如果数组中为1，则表示是和
s2冲突的，那么就删除
#include<iostream>
#include<string>

using namespace std;

int main()
{
    string s1,s2;
    getline(cin,s1);
    getline(cin,s2);//因为cin遇到空格就会停下
    
    int hash[256]={0};    //字符一共256个
    for(int i=0;i<s2.size();i++)
    {
        hash[s2[i]]++;  //将s1的每个字符都放在hash中。表示出现了
    }
    string s3;
    for(int i=0;i<s1.size();i++)
    {
        if(hash[s1[i]]==0)  //如果s2的字符出现在hash中。表示出现了，那么就删除
        {
            s3.push_back(s1[i]);
        }
    }
    cout<<s3<<endl;
    return 0;
}